#ifndef STEAM_H
#define STEAM_H

#include <Arduino.h>

// PM2.5传感器相关变量定义
volatile float mind_n_FLAG = 0;    // 特征字节(0xA5)存储变量
volatile float mind_n_TSI = 1;   // TSI仪器光度法标定系数，建议值0.4
volatile float mind_n_DATAH = 0;   // PM2.5浓度值高7位数据存储
volatile float mind_n_DATAL = 0;   // PM2.5浓度值低7位数据存储
volatile float mind_n_PM25 = 0;    // 计算后的PM2.5浓度值
volatile float mind_n_CHK = 0;     // 校验字节存储变量

/**
 * @brief 读取PM2.5传感器数据并计算浓度值
 * @return float 返回计算后的PM2.5浓度值
 * 
 * 传感器数据格式：
 * 1. 特征字节(0xA5)
 * 2. 数据字节1(DATAH) - 浓度值高7位
 * 3. 数据字节2(DATAL) - 浓度值低7位 
 * 4. 校验字节(SUM) - 前3字节累加和的低7位
 * 
 * 浓度值计算公式：
 * PM2.5 = (DATAH × 128 + DATAL) × TSI系数
 */
float readPM25Value() {
    if (Serial1.available()) {
        
        mind_n_FLAG = Serial1.read();   // 读取特征字节(应为0xA5)
        mind_n_DATAH = Serial1.read();   // 读取浓度高7位数据
        mind_n_DATAL = Serial1.read();   // 读取浓度低7位数据
        mind_n_CHK = Serial1.read();     // 读取校验字节
        
        // 计算PM2.5浓度值 = (高7位×128 + 低7位) × TSI系数
        mind_n_PM25 = (((mind_n_DATAH * 128) + mind_n_DATAL) * mind_n_TSI);
    }
    delay(1000);  // 采样间隔1秒
    return mind_n_PM25;
}

#endif